Lab-1 | Dinning Programmers | Барковская Мария Александровна#9
Lab-1 | Dinning Programmers | Барковская Мария Александровна#9mmmmarryyy wants to merge 4 commits intomasterfrom
Conversation
|
|
||
| public Restaurant(int programmersCount, int waiterCount, int portionsCount) { | ||
| this.portionsCount = new AtomicInteger(portionsCount); | ||
| this.portionsAskQueue = new LinkedBlockingQueue<>(); |
There was a problem hiding this comment.
Кажется, что при выборе LinkedBlockingQueue и достаточном разбросе скорости поедания ваши тесты на равномерную еду провалятся. Либо расскажите, что обеспечивает у вас равномерность?
There was a problem hiding this comment.
Я подходила к размышлению так:
- Иерархия ресурсов (ложек) помогает предотвращать голодание и deadlock
- Случайные временные интервалы, которые я проставила для think() и eat(), имеют случайную длительность за счет рандома, что естественным образом перемешивает порядок (при этом в среднем, каждый программист примерно одинаково со всеми тратит время на поесть и примерно одинаково со всеми тратит время на подумать)
- За счет LinkedBlockingQueue у нас все программисты равны в очереди на обслуживание, то есть кто первый попросил порцию еды, тот первый ее и получил, это кажется логичным
И, кажется, все это как раз суммарно дает нам равномерность, что мы можем видеть, например, по логам в сообщении выше
Вообще, я подбирала структуры данных в самом начале, еще когда думала как строить код, каким у меня будут классы, какие в них будут поля и методы, чтобы понять, как это все вместе должно работать, и я тогда рассматривала альтернативы и смотрела еще в сторону PriorityBlockingQueue, но в тот момент мне это не показалось хорошей идеей, потому что из альтернатив, что можно считать приоритетом был только id программиста, а это кажется, привело бы к несправедливости, когда программисты с меньшими id всегда получали бы преимущество
Сейчас, пока я писала ответ, мне в голову пришла идея, что, кажется, как альтернативу можно использовать PriorityBlockingQueue с приоритетом в виде количества уже съеденных порций программистом. Это тоже поможет нам достичь равномерности распределения еды, потому что еда всегда в первую очередь будет доставаться тому, кто меньше поел (но у меня почему-то есть какие-то внутренние сомнения по такому решению, как будто тут есть какой-то подвох, не знаю, почему)
There was a problem hiding this comment.
Я и подводил к PriorityBlockingQueue с приоритетом по голоду, так действительно все бы ели справедливо) Будет здорово, если к защите переделаете, но не обязательно
No description provided.